//
// Created by antler on 2018/12/19.
//
#ifndef LUA_UICONTEXT_H
#define LUA_UICONTEXT_H

#include <jni.h>
#include "UIView.h"

#define CLASSNAME_UICONTEXT "UIContext"
#define USERTYPE_UICONTEXT "UIContext"

class UIContext {
public:
    friend class UI;

public:
    UIContext();

    ~UIContext();

    // 显示UI界面
    // 注意UI:show为非阻塞调用，调用后会立即返回
    void show();

    // 关闭UI界面
    void close();

    // 获取根组件
    UIView *getRootView();

    // 搜索组件
    // 搜索并返回UIContext显示架构中ID为id的UIView实例
    UIView *findView(const std::string &id);

    // 动态创建组件
    // 从当前UIContext示例中动态创建UIView示例，layout结构共享UI.createContext时传入的style属性
    UIView *createView(const std::string &layout);

protected:
    bool initWith(jobject juicontext, const std::string &layout, const std::string &style);

    bool isOk();

    jobject getUIContextObject();

    void setUIContextObject(jobject juicontext);

    void releaseUIContextObject();

protected:
    jobject mUIContextObj;
};

#endif // LUA_UICONTEXT_H